#ifndef __KALMAN_FILTER_H
#define __KALMAN_FILTER_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    double X;    // 当前状态值（滤波后的值）
    double P;    // 估计误差协方差
    double Q;    // 过程噪声协方差（系统变化率）
    double R;    // 观测噪声协方差（测量噪声）
    double K;    // 卡尔曼增益
} KalmanFilter;

/**
 * @brief 初始化卡尔曼滤波器
 * @param kf 滤波器结构体指针
 * @param Q  过程噪声协方差
 * @param R  观测噪声协方差
 */
void Kalman_Init(KalmanFilter *kf, double Q, double R);

/**
 * @brief 更新卡尔曼滤波器
 * @param kf         滤波器结构体指针
 * @param measurement 新的测量值
 * @return 滤波后的值
 */
double Kalman_Update(KalmanFilter *kf, double measurement);

#ifdef __cplusplus
}
#endif

#endif // __KALMAN_FILTER_H
